package com.jintian.smart.kernel.flowable.api;

import com.jintian.smart.kernel.core.auth.IOperator;
import com.jintian.smart.kernel.core.dto.OrgUnit;
import org.flowable.task.api.Task;

import java.util.List;


public interface PermissionService {
    boolean canExecute(IOperator operator, Task task);

    List<OrgUnit> getCanExecutor(Task task);

    /**
     * 是否任务所有者或者委派人
     *
     * @param operator
     * @param task
     * @return
     */
    boolean isTaskOwnerOrAssignee(IOperator operator, Task task);

    /**
     * 是否候选人，即执行者范围
     *
     * @param operator
     * @param task
     * @return
     */
    boolean isTaskCandidate(IOperator operator, Task task);

    /**
     * 是否参与者
     *
     * @param operator
     * @param task
     * @return
     */
    boolean isTaskParticipant(IOperator operator, Task task);

    /**
     * 是否组成员
     *
     * @param operator
     * @param groupKind
     * @param groupCode
     * @return
     */
    boolean isMemberOfGroup(IOperator operator, String groupKind, String groupCode);
}
